package com.itheima.edu.info.mannager.controller;

import com.itheima.edu.info.mannager.domain.Student;
import com.itheima.edu.info.mannager.service.StudentService;

import java.util.Scanner;

/*客服类:专门用来和客户打交道的;
 *  1.接收用户键盘录入的数据      ----用户请求
 *  2.找业务员完成具体的业务功能操作
 *  3. 根据业务员的反馈结果,来给客户相关的一个响应信息
 * */
public class StudentController {
    Scanner sc = new Scanner(System.in);
    private StudentService studentService = new StudentService();

    //开启学生管理系统,并展示学生管理系统菜单
    public void start() {
        Scanner sc = new Scanner(System.in);
        while (true) {
            //主菜单搭建
            System.out.println("--------欢迎来到 <学生> 管理系统--------");
            System.out.println("请输入您的选择: 1.添加学生  2.删除学生  3.修改学生  4.查看学生  5.退出");
            String choice = sc.next();
            switch (choice) {
                case "1":
                    // System.out.println("添加");
                    //添加学生信息调用方法 addStudent();
                    addStudent();
                    break;
                case "2":
                    //删除学生数据
                    //System.out.println("删除");
                    deleteStudentById();
                    break;
                case "3":
                    //System.out.println("修改");
                    updateStudent();
                    break;
                case "4":     //查询功能
                    findAllStudent();
                    // System.out.println("查询");
                    break;
                case "5":
                    System.out.println("退出");
                    return;
            }
        }
    }

    //修改学生信息
    public void updateStudent() {
        String updateId = inputStudentId();
        Student newStu = inputStudentInfo(updateId);
        studentService.updateStudent(updateId, newStu);

        System.out.println("修改成功!");
    }


    // 键盘录入学生信息
    public Student inputStudentInfo(String id) {
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        String age = sc.next();
        System.out.println("请输入学生生日:");
        String birthday = sc.next();
        Student stu = new Student();
        stu.setSid(id);
        stu.setName(name);
        stu.setAge(age);
        stu.setBirthday(birthday);
        return stu;
    }

    // 键盘录入学生id
    public String inputStudentId() {
        String id;
        while (true) {
            System.out.println("请输入学生id:");
            id = sc.next();
            boolean exists = studentService.isExists(id);
            if (!exists) {
                System.out.println("您输入的id不存在, 请重新输入:");
            } else {
                break;
            }
        }
        return id;
    }

    //添加学生功能
    public void addStudent() {

        //1.键盘录入学生信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生id:");
        String id;
        while (true) {
            id = sc.next();
            //1.1调用业务员的判断学号是否纯在方法进行业务判断
            boolean flag = studentService.isExists(id);
            if (flag) {
                System.out.println("当前学号已被占用,请重新输入新的学号");
            } else {
                //不存在,折死循环,程序继续执行
                break;
            }
        }

        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        String age = sc.next();
        System.out.println("请输入学生生日:");
        String birthday = sc.next();
        //2.将学生信息封装成为学生对象
        Student stu = new Student();
        stu.setSid(id);
        stu.setName(name);
        stu.setBirthday(birthday);
        stu.setAge(age);

        //3.将学生对象信息传递给StudentService(业务员)中的addStudent

        boolean result = studentService.addStudent(stu);
        //4.根据返回值boolean类型结果,在控制台中输出打印成功/失败
        if (result) {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }
    }

    // 查询所有学生功能
    public void findAllStudent() {
        //让业务员去进行查询业务,把查到的结果拿到
        Student[] students = studentService.findAllStudent();

        //2.根据业务员查询的结果,来给用户进行不同数据展示
        if (students == null) {
            //说明系统中没有数据,提示用户先去添加
            System.out.println("系统暂无数据,请先添加数据");
        } else {
            //有数据我们就展示数据
            //现展示表头数据
            System.out.println("学号\t\t姓名\t年龄\t生日");
            //遍历数组,展示学生信息
            for (int i = 0; i < students.length; i++) {
                Student stu = students[i];
                //当前索引位置未知的元素是否范围null ,不为null才展示
                if (stu != null) {
                    System.out.println(stu.getSid() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t\t" + stu.getBirthday());
                }
            }
        }
    }

    //删除学生功能
    public void deleteStudentById() {
        String delId = inputStudentId();
        // 3. 调用业务员中的deleteStudentById根据id, 删除学生
        studentService.deleteStudentById(delId);
        // 4. 提示删除成功
        System.out.println("删除成功!");
    }
}
